
/**
 * 咖啡机函数的主要入口函数
 * @param {array} drinks 喝水的处理数组
 * @param {string} a 咖啡机的洗干净的时间
 * @param {string} b 挥发所需要的时间
 */
function main(drinks, a, b) {
  if(drinks == null || !Array.isArray(drinks) || drinks.length ==0) return 0
  drinks.sort((a,b) => a-b)
  return process(drinks, a, b, 0, 0)
}

/**
 * 处理函数
 * @param {array} drinks 喝水的完成的数组 固定
 * @param {string} a ..
 * @param {string} b 
 * @param {number} index 当前处理到的drinks 位置
 * @param {number} washline 喝水机的空闲时间
 */
function process(drinks, a, b , index, washline) {
  if(index == drinks.length-1) {
    // 也是一个用还是不用的问题这样
    return Math.min(Math.max(washline, drinks[index]) + a, drinks[index] + b)
  }
  // 我这个杯子使用咖啡机来进行处理, 这里的第一个max 判断就是要等到有这个机会的时候才能使用
  let wash = Math.max(washline, drinks[index]) + a
  let next1 = process(drinks, a, b , index+1, wash)
  let p1 = Math.max(wash, next1)

  // 我的这个杯子使用挥发的方式进行处理
  let dry = drinks[index] + b
  let next2 = process(drinks, a, b ,index+1, washline)
  let p2 = Math.max(dry, next2)

  return Math.min(p1, p2)
}